Test the result of acos() for possible errors (gcdist).
authoroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Wed, 5 Apr 2006 18:16:10 +0000 (18:16 +0000)
committeroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Wed, 5 Apr 2006 18:16:10 +0000 (18:16 +0000)
gpsbabel/grtcirc.c

index 3676eeaa5a2fe4d8f0b70ca39cb1404c127f8a85..69d1c501dcadecd6edfb3bda18ef59916d83a1ce 100644 (file)
@@ -18,6 +18,7 @@
     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
 
  */
+#include <errno.h>
 #include <stdio.h>
 #include "defs.h"
 
@@ -51,7 +52,13 @@ double tomiles( double rads ) {
 }
 
 double gcdist( double lat1, double lon1, double lat2, double lon2 ) {
-  return acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2));
+  double res;
+  res = acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2));
+  if (errno == EDOM) { /* Math argument out of domain of function */
+    errno = 0;
+    return 0;
+  }
+  return res;
 }
  
 double linedist(double lat1, double lon1,